#include <stdio.h>
#include <string.h>

char name[100][10];//储存用户名字,最多容纳量定为100
static int i=0;//储存用户数量
char mealname[4][50]={"黄焖鸡","鱼香肉丝","麻婆豆腐","清炒土豆丝"};//储存菜名
double mealcost[4]={25.0,20.0,10.0,8.0};
int like[4][2]={1,0,2,0,3,0,4,0};
int mealnum[100][2]={0};//储存菜品编号和数量
int time[100];//储存送餐时间
char mealsite[100][20];//储存送餐地址
const double sendcost=5.0;//定义配送费
int mealstate[100][2];//储存订单状态
int likesort[4]={0,1,2,3};//储存根据点赞数倒序排列的菜名

void order()
{
    printf("***我要订餐***\n");
    printf("请输入订餐人姓名：");
    scanf("%9s",name[i]);
    printf("序号 菜名\t单价\t点赞数\n");
    for(int j=0;j<4;j++)
    {
        printf("%d  %5s\t%.1f\t%d\n",j+1,mealname[j],mealcost[j],like[j][1]);
    }
    int flag1=1;
    do
    {
        printf("请选择您要选的菜品编号:");
        scanf("%d",&mealnum[i][0]);
        if(mealnum[i][0]==1||mealnum[i][0]==2||mealnum[i][0]==3||mealnum[i][0]==4)
        {
            flag1=0;
        }else
        {
            printf("输入序号不存在！请重新输入\n");
        }
    }while(flag1);
    printf("请输入您需要的份数:");
    scanf("%d",&mealnum[i][1]);
    printf("请输入送餐时间(送餐时间是10点到20点间整点送餐):");
    scanf("%d",&time[i]);
    printf("请输入送餐地址:");
    scanf("%19s",mealsite[i]);
    printf("订餐成功!\n");
    printf("您订的是:%5s  %d份\n",mealname[(mealnum[i][0])-1],mealnum[i][1]);
    printf("送餐时间:%d时\n",time[i]);
    double cost=mealnum[i][1]*mealcost[(mealnum[i][0])-1]+sendcost;
    printf("餐费:%.1f元，送餐费:%.1f元，总计：%.1f元。\n",cost-sendcost,sendcost,cost);
    mealstate[i][0]=i+1;//用户订单序号
    mealstate[i][1]=0;//用户订单状态为已预定
    i++;
    printf("输入0返回:");
    int flag2;
    scanf("%d",&flag2);
}

void check()
{
    printf("***查看餐袋***\n");
    printf("序号\t订餐人\t餐品信息\t\t送餐时间\t送餐地址\t\t总金额\t订单状态\n");
    for(int j=0;j<i;j++)
    {
        double cost=mealnum[j][1]*mealcost[(mealnum[j][0])-1]+5.0;
        printf("%d\t%s\t%5s %d份\t\t%d时\t\t%s\t\t%.1f\t",mealnum[j][0],name[j],mealname[(mealnum[j][0]-1)],mealnum[j][1],time[j],mealsite[j],cost);
        if(mealstate[j][1]==0)
        {
            printf("已预定\n");
        }else
        {
            printf("已完成\n");
        }
    }
    printf("输入0返回:");
    int flag1;
    scanf("%d",&flag1);
}

void sign()
{
    printf("***签收订单***\n");
    int num;
    int flag1=1;
    do
    {
        printf("请选择要签收的订单序号：");
        scanf("%d",&num);
        if(num<0||num>i)
        {
            printf("订单不存在，请检查订单序号并重新输入\n");
        }else{
            flag1=0;
        }
    }while(flag1);
    if(mealstate[num-1][1]==0)
    {
        mealstate[num-1][1]=1;
        printf("订单签收成功！\n");
    }else
    {
        printf("订单已签收,请勿重复操作!\n");
    }
    printf("输入0返回:");
    int flag2;
    scanf("%d",&flag2);
}

void orderdel()
{
    printf("***删除订单***\n");
    printf("请输入要删除的订单序号:");
    int delnum;
    scanf("%d",&delnum);
    if(delnum<=0||delnum>i)
    {
        printf("您要删除的订单不存在!\n");
    }else
    {
        if(mealstate[delnum-1][1]==1)
        {
            printf("删除订单成功!\n");
            for(int j=delnum-1;j<i-1;j++)
            {
                strcpy(name[j],name[j+1]);
                mealnum[j][0]=mealnum[j+1][0];
                mealnum[j][1]=mealnum[j+1][1];
                time[j]=time[j+1];
                strcpy(mealsite[j],mealsite[j+1]);
                mealstate[j][0]=mealstate[j+1][0];
                mealstate[j][1]=mealstate[j+1][1];
            }
            i--;
        }
        else
        {
            printf("您选择的订单未签收,不能删除!\n");
        }
    }
    printf("输入0返回:");
    int flag1;
    scanf("%d",&flag1);
}

void upvote()
{
    printf("***我要点赞***\n");
    printf("序号 菜名\t单价\t点赞数\n");
    for(int j=0;j<4;j++)
    {
        printf("%d  %5s\t%.1f\t%d\n",likesort[j]+1,mealname[(likesort[j])],mealcost[(likesort[j])],like[(likesort[j])][1]);
    }
    int likenum;
    int flag1=1;
    do
    {
        printf("请选择您要点赞的菜品序号:");
        scanf("%d",&likenum);
        if(likenum!=1&&likenum!=2&&likenum!=3&&likenum!=4)
        {
            printf("菜品序号输入有误，请检查菜品序号并重新输入\n");
        }
        else
        {
            flag1=0;
        }
    }while(flag1);
    like[likenum-1][1]++;
    for(int j=0;j<4-1;j++)
    {
        int max=j;
        for(int k=j+1;k<4;k++)
        {
            if(like[likesort[k]][1]>like[likesort[max]][1])
            {
                max=k;
            }
        }
        int w=likesort[j];
        likesort[j]=likesort[max];
        likesort[max]=w;
    }
    /*for(int x=0;x<4;x++)
    {
        printf("%d\n",likesort[x]);
    }*/
    printf("输入0返回:");
    int flag2;
    scanf("%d",&flag2);
}

int main(void)
{
    int flag=1;
    do
    {
        printf("欢迎使用【吃了么订餐系统】\n");
        printf("******************\n");
        printf("1、我要订餐\n");
        printf("2、查看餐袋\n");
        printf("3、签收订单\n");
        printf("4、删除订单\n");
        printf("5、我要点赞\n");
        printf("6、退出系统\n");
        printf("******************\n");
        printf("请选择：");
        int mode;
        scanf("%d",&mode);
        switch(mode)
        {
            case 1:
                order();
                break;
            case 2:
                check();
                break;
            case 3:
                sign();
                break;
            case 4:
                orderdel();
                break;
            case 5:
                upvote();
                break;
            case 6:
                flag=0;
                break;
            default:
                printf("输入有误,请输入1-6选择您需要的服务\n");
        }
    }while(flag);
    return 0;
}